package JDK8新特性_集合.Stream流入门;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        // JDK8之后最大的改变之一(Stream, Lambda)
        // 什么是Stream: 也叫Stream流, 是JDK8开始新增的一套API, 可以用于操作集合或则元素的数据
        // 优势: Stream流大量的结合了Lambda的语法风格来编程, 提供了一种更加强大, 更加简单的方式操作集合或者数组中的数据, 代码简洁, 可读性更好

        // 案例: 需求: 在集合中找出姓张的, 并且三个字
        List<String> names = new ArrayList<>();
        Collections.addAll(names, "张三丰", "张无忌", "周芷若", "赵敏", "张强");
        System.out.println(names);

        // 原方法:
        List<String> list = new ArrayList<>();
        for (String name : names) {
            if (name.startsWith("张") && name.length() == 3) {
                list.add(name);
            }
        }
        System.out.println(list);

        // Stream流解决这个问题
        List<String> list1 = names.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).collect(Collectors.toList());// 支持链式编程
        System.out.println(list1);

        // 这里用到的Api有:
        // startsWith("a") // 问这个字符串首个元素是不是a
        // filter() // 这是一个Stream流中的一个过滤函数, 这个函数会根据所给的条件,判断该集合的某些元素是否留下来
        //Stream流的使用步骤:
        // 由数据源(集合/数组/...)获取Stream流, 再用Stream流提供的强大的工具进行处理/计算, 最后获取处理结果
    }
}
